package in.lib.view; import in.lib.utils.html.ADNHtml; import in.lib.view.spannable.NotUnderlinedClickableSpan; import lombok.Setter; import android.content.Context; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.text.method.MovementMethod; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; public class LinkifiedTextView extends ResizableTextView implements OnLongClickListener, OnClickListener { private SpannableStringBuilder mStrBuilder; private String cachedString; @Setter private boolean linkHit = false; public LinkifiedTextView(Context context) { super(context); } public LinkifiedTextView(Context context, AttributeSet attrs) { super(context, attrs); } public void setText(String text) { if (!TextUtils.isEmpty(text)) { if (mStrBuilder == null || !cachedString.equals(text)) { cachedString = text; mStrBuilder = new SpannableStringBuilder(ADNHtml.fromHtml(cachedString)); } setText(mStrBuilder); } } @Override public boolean onTouchEvent(MotionEvent event) { linkHit = false; boolean res = super.onTouchEvent(event); if (!linkHit) { return false; } return res; } public void setLinkMovementMethod(MovementMethod movement) { setMovementMethod(movement); if (movement != null) { setOnLongClickListener(this); //setOnClickListener(this); } } @Override public boolean onLongClick(View v) { if (mStrBuilder != null) { NotUnderlinedClickableSpan[] spans = mStrBuilder.getSpans(getSelectionStart(), getSelectionEnd(), NotUnderlinedClickableSpan.class); if (spans.length == 1) { NotUnderlinedClickableSpan span = spans[0]; span.onLongClick(v); return true; } } return false; } @Override public void onClick(View v) { if (mStrBuilder != null) { NotUnderlinedClickableSpan[] spans = mStrBuilder.getSpans(getSelectionStart(), getSelectionEnd(), NotUnderlinedClickableSpan.class); if (spans.length > 0) { NotUnderlinedClickableSpan span = spans[0]; span.onSimpleClick(v); } } } }